package errs

type CodeError struct {
	Code    int
	ErrMsg  string
	MsgShow string
}

func (e *CodeError) Error() string {
	return e.ErrMsg
}

func (e *CodeError) GetCode() int {
	return e.Code
}
func (e *CodeError) GetErrShow() string {
	return e.MsgShow
}

// NewCodeError 新建自定义error实例化
func NewCodeError(code int, MsgShow string,ErrDetailMsg string) error {
	// 初次调用得用Wrap方法，进行实例化
	return &CodeError{
		Code:    code,
		MsgShow: MsgShow,
		ErrMsg:  ErrDetailMsg,
	}
}

func IsCodeError(err error) bool {
	switch err.(type) {
	case *CodeError:
		return true
	case error:
		return false
	}
	return false
}


//func NewCodeError2(code int, MsgShow string, ErrMsg string) error {
//	// 初次调用得用Wrap方法，进行实例化
//	return &CodeError{
//		Code:    code,
//		ErrMsg:  ErrMsg,
//		MsgShow: MsgShow,
//	}
//}

// GetErrShow 返回显示的信息
func GetErrShow(err error) string {
	if err == nil {
		return ""
	}
	switch typed := err.(type) {
	case *CodeError:
		return typed.MsgShow
	case error:
		return typed.Error()
	}
	return ""
}
// GetErrMsg 返回显示的信息
func GetErrMsg(err error) string {
	if err == nil {
		return ""
	}
	switch typed := err.(type) {
	case *CodeError:
		return typed.ErrMsg
	case error:
		return typed.Error()
	}
	return ""
}

// GetErrCode 返回显示的信息
func GetErrCode(err error) int {
	if err == nil {
		return 0
	}
	switch typed := err.(type) {
	case *CodeError:
		return typed.Code
	case error:
		return 417
	}
	return 0
}
